home *** CD-ROM | disk | FTP | other *** search
- EXTDRV
-
- ■ 仕組み
- DOS のネットワーク・リダイレクタ I/F(INT 2fH/11H)を利用して、拡張区画
- を解釈する filesystem をインストールしています。(real mode 常駐)
- これは、MSCDEX.EXE が使っているのと同じ方法です。
-
- ■ 常駐時に指定するパラメータについて
- README.DOC にも出てきた4つのパラメータの決め方ですが、
-
- EXTDRV 16 5 32 4 0 0 区画のリスト
- ^^^^^^^^^^^^^^^
- (1) (2) (3) (4)
-
- (1) FAT キャッシュのサイズ(2KB 単位)
- EXTDRV に扱わせるドライブ数が1つの場合は 16 ~ 64 程度。
- これ以上増やしても意味はありません。
- ドライブ数が多ければ、それに合わせて増やすといいかもしれません。
-
- (2) ルート・ディレクトリ・キャッシュのサイズ(2KB 単位)
- EXTDRV が扱うドライブ数以上にすると効率的です。(最小は2)
- また、ルート・ディレクトリにファイルが数十以上ある場合は、それに
- あわせて増やすと効果があるでしょう。
- ちなみに、ディレクトリ・エントリのサイズは 32byte ですから、キャッシュ
- の1エントリには 64 ディレクトリ・エントリ入ります。
-
- (3) クラスタ・キャッシュのサイズ(クラスタ・サイズ単位)
- 数十以上。
- あまり大きくし過ぎるとキャッシュ・サーチのオーバーヘッドでかえって
- 遅くなるかもしれません。(要改善 ^^;)
-
- (4) DMA バッファのサイズ(1KB 単位)
- これはクラスタのサイズ分あればいいです。
-
- 以上。
-
- ■ 経緯
- 以前から T-OS から 127MB 超の区画(32bit sector)を使えないかな~と考え
- ていました。
- 身近な所を見ると MSCDEX.EXE が DOS の FAT filesystem とは全く違う ISO9660
- を扱っています。これは常駐して DOS の内部を hook しているようです。
- MSCDEX を真似すれば・・・ と考えたのですが、DOS や MSCDEX を解析するのは
- 大変そうなので諦めていました。
-
- ● Version 0.1
- 次に考えたのは INT21 を hook する方式です。
- この場合、ディスク関連の INT 21H コールを全て書く必要がありますが、INT 21H
- は解説も出回っているので実現は可能です。
-
- 一方、DOS filesystem のアクセス・ルーチンですが、これは UN*X 系のフリーウェ
- アがいくつかあり、これらのソースを流用することが可能でした。
- mtools や Linux 等がそれで、今回は mtools のソースをベースにさせていただき
- ました。
-
- ● Version 0.2
- V0.1 では実装の容易さを選び NSDD として常駐させたため、リアル・モードから
- は使えず、応用範囲がネイティブ・アプリのみに限られてしまいました。
- が、開発環境としても使いたいと思って V0.2 ではリアル常駐版を作ってみました。
- それでも、プログラムの起動や I/O リダイレクトはできません。
- 処理を INT 21H の入口で振り分けているので DOS 内部との連携ができないからで
- す。やはり MSCDEX と同様に INT21H よりも内部でフックする必要がありそうです。
-
- ● Version 0.3
- そこで MSCDEX やネットワーク・リダイレクタに関する情報を探していたのですが、
- 「UNDOCUMENTED DOS」に載っている事がわかりました。
- version 0.3 は、この情報に基づき実装しました。
- この方式ならファイルやディレクトリをアクセスする部分だけを実装すればよく、
- filesystem に依存しない事(プログラムの実行等)は DOS が行いますので V0.2
- までの問題は解消できました。
- これにより、普通の区画と同等に使えるようになりました。
- (ネットワーク・ドライブ扱いになります。)
-
- ただ、ネットワーク・ドライブである事がアプリにわかると、一部のアプリでは不
- 都合が起きました。
- (LiveMovie のキャプチャではディスクの空き容量が 0 に見えてしまって、キャ
- プチャできない。 原因不明)
- このため、INT 21H もフックして INT 21H/4409H を監視し、リモート・ドライブ
- だという属性を返さないようにしています。
-
- ● Version 1.0
- この後、伊藤哲史さんから CoCo.exe の protect memory I/F を教わりました。
- これを使って version 1.0 ではディスク・キャッシュのデータ本体はプロテクト
- ・メモリに置くようにしました。
- 更に、バッファ管理構造体はアプリ領域3に置くようにするとともに、常駐終了時
- に初期化部(コード、データ)を切り離すことで常駐サイズを低減しました。
-
- ● Version 1.1
- EXTDRV を常駐させる時に、対象のドライブが not ready(電源 OFF など)でも
- 構わないようにしました。
- また、Write Protect されたメディアへの書き込みを検出するようにしました。
- どちらも、MO を扱う時に便利です。
-
- ● Version 1.2
- Version 1.1 の bugfix 版を Version 1.2 とした。
-
- ■ ToDO
- ・キャッシングの効率改善
- リプレース方法
- サーチのハッシュ化
- ・ドライブごとにバッファ・キャッシュの使用上限を制限できるようにしたい。
-
- 野村 茂弘 GBB00111
-